//package cn.wuyu.baselibrary.mvvm;
//
//
//import android.accounts.NetworkErrorException;
//import android.arch.lifecycle.Lifecycle;
//import android.arch.lifecycle.LifecycleObserver;
//import android.arch.lifecycle.OnLifecycleEvent;
//
//import com.google.gson.JsonIOException;
//import com.google.gson.JsonParseException;
////import com.test.MyLiveDataToViewModel.ui.viewModel.BaseViewModel;
////import com.test.MyLiveDataToViewModel.ui.model.BaseModel;
//
//import org.json.JSONException;
//
//import java.net.ConnectException;
//import java.net.UnknownHostException;
//import java.text.ParseException;
//import java.util.concurrent.TimeoutException;
//
//import io.reactivex.Observer;
//import io.reactivex.disposables.Disposable;
//
//public abstract class BaseObserver<M> implements LifecycleObserver, Observer<BaseModel<M>> {
//
//    public Lifecycle mLifecycle;
//    private Disposable mDisposable;
//    private BaseViewModel baseViewModel;
//
//    /**
//     * 不管理该Observer的生命周期
//     */
//    public BaseObserver() {
//    }
//
//    /**
//     * 管理该Observer的生命周期
//     *
//     * @param baseViewModel
//     */
//    public BaseObserver(BaseViewModel baseViewModel) {
//        this.baseViewModel = baseViewModel;
//        this.mLifecycle = baseViewModel.getLifecycleOwner().getLifecycle();
//    }
//
//    @Override
//    public void onSubscribe(Disposable d) {
//        mDisposable = d;
//        if (mLifecycle != null)
//            mLifecycle.addObserver(this); //加入到lifecycle观察者
//    }
//
//    @Override
//    public void onNext(BaseModel<M> mBaseModel) {
//        switch (mBaseModel.getStat()) {
//            case 0:
//                onSuccess(mBaseModel);
//                break;
//            case 2: //处理一些额外协议，并且在所有接口都需要
//                if (baseViewModel == null) return;
//                break;
//        }
//    }
//
//    @Override
//    public void onComplete() {
//
//    }
//
//    @Override
//    public void onError(Throwable e) {
//        if (e instanceof ConnectException
//                | e instanceof TimeoutException
//                | e instanceof NetworkErrorException
//                | e instanceof UnknownHostException){  //HTTP错误
//            onFailure(new NetworkErrorException("网络请求失败"));
//        }else if (e instanceof JsonParseException
//                | e instanceof JSONException
//                | e instanceof ParseException){  //解析错误
//            onFailure(new JsonIOException("Json解析失败"));
//        }else{   //未知错误
//            onFailure(e);
//        }
//    }
//
//    /**
//     * 返回成功
//     */
//    protected abstract void onSuccess(BaseModel<M> model);
//
//    /**
//     * 返回失败, 是否为网络错误
//     */
//    protected abstract void onFailure(Throwable t);
//
//
//
//    /**
//     * 释放Rx观察者（在Lifecycle的ON_DESTROY事件发生时会自动调用该方法）
//     */
//    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
//    public void onDisPose() {
//        if (mLifecycle != null)
//            mLifecycle.removeObserver(this);//解除与lifecycle的绑定。
//        if (mDisposable != null && !mDisposable.isDisposed())
//            mDisposable.dispose();
//    }
//}
